home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 09 - 1993 / 09.09 Sep 93 / FrameAnim App ƒ / FrameAnim.h < prev    next >
Encoding:
Text File  |  1994-11-06  |  7.0 KB  |  291 lines  |  [TEXT/KAHL]

  1. // ••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
  2. // • Program:    FrameAnim
  3. // • File:        FrameAnim.h
  4. // •
  5. // • Copyright © 1993 by Scott B. Steinman, O.D., Ph.D. All Rights Reserved.
  6. // ••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
  7.  
  8. #ifndef __FrameAnim__
  9. #define __FrameAnim__
  10.  
  11. #include <stdio.h>
  12. #include <stddef.h>
  13. #include <stdlib.h>
  14. #include <string.h>
  15. #include <ctype.h>
  16. #include <math.h>
  17. #include <setjmp.h>
  18. #include <assert.h>
  19. #include <ansi_private.h>
  20.  
  21. #include <GestaltEqu.h>
  22. #include <QDOffscreen.h>
  23. #include <Palettes.h>
  24. #include <Fonts.h>
  25. #include <OSUtils.h>
  26. #include <Retrace.h>
  27. #include <Slots.h>
  28.  
  29. // • ------------------ General Definitions ------------------------------- 
  30.  
  31. #define Null            0L
  32. #define    NullHandle        0L
  33. #define    NullPointer        0L
  34. #define NoFlags            0
  35. #define    NilString        "\p"
  36.  
  37. // • ------------------ ToolBox Traps ------------------------------------- 
  38.  
  39. pascal long     GetVBLRec( void ) = 0x2E88;        // • Push A0 onto stack
  40.  
  41. // • ------------------ ToolBox Definitions ------------------------------- 
  42.  
  43. #define kMinSleep            0L
  44. #define kNilMouseRegion        0L
  45.  
  46. enum {
  47.     kRemoveAllEvents    = 0,
  48.     kMoveToFront        = -1                
  49. };
  50.  
  51. // • ------------------ Menu Resource IDs --------------------------------- 
  52.  
  53. enum {
  54.     kMBarID     = 400,      
  55.     kAppleID     = 401,     
  56.     kFileID     = 402,
  57.     kAnimID     = 403
  58. };
  59.  
  60. // • ------------------ Menu Item Number Definitions ---------------------- 
  61.  
  62. enum {
  63.     kAboutAnimItem     = 1        // • Apple Menu Items 
  64. };
  65.  
  66. enum {
  67.     kOpenFilmItem     = 1,    // • File Menu Items     
  68.     kSaveFilmItem     = 2,
  69.     kQuitItem         = 4
  70. };
  71.  
  72. enum {
  73.     kPlayItem         = 1,    // • Animation Menu Items 
  74.     kFrameSzItem    = 3,
  75.      kGrayItem        = 4,
  76.     kFilmItem         = 6
  77. };
  78.  
  79. // • ------------------ Resource ID for PICS Animation File --------------- 
  80.  
  81. enum {
  82.      kFirstPictID    = 1000,
  83.      kPICSInfoID        = 1000,
  84.      kColTableID        = 1000
  85. };
  86.  
  87. // • ------------------ Alert Resource IDs -------------------------------- 
  88.  
  89. enum {
  90.     kAboutAlertID    = 600,          
  91.     kErrorAlertID      = 601,
  92.      kMachineAlertID    = 602,
  93.      kFPUAlertID        = 603,
  94.      kQD32BitAlertID    = 604,
  95.     kSystem7AlertID = 605
  96. };
  97.  
  98. // • ------------------ Dialog Box Resource IDs --------------------------- 
  99.  
  100. enum {
  101.     kFilmDlgID         = 800,            
  102.     kFrameSzDlgID    = 801,
  103.      kMonitorDlgID    = 802,
  104.      kGrayDlgID        = 803
  105. };
  106.  
  107. enum {
  108.     kMonitorDlgGoAhead     = 1,        
  109.     kMonitorDlgMainMon    = 2,
  110.     kMonitorDlgSecMon    = 3,
  111.     kMonitorDlgCancel    = 4
  112. };
  113.  
  114. enum {
  115.     kFilmDlgGoAhead        = 1,        
  116.     kFilmDlgNumFrames     = 2,
  117.     kFilmDlgFrameDelay     = 3,
  118.      kFilmDlgSizeDiff    = 4,
  119.     kFilmDlgCancel        = 5
  120. };
  121.  
  122. enum {
  123.      kFrameSzDlgGoAhead    = 1,        
  124.      kFrameSzDlgDiam        = 2,    
  125.      kFrameSzDlgCancel    = 3        
  126. };
  127.  
  128. enum {
  129.      kGrayDlgGoAhead        = 1,    
  130.      kGrayDlgBkgndGray    = 2,    
  131.      kGrayDlgTargetGray    = 3,
  132.      kGrayDlgCancel        = 4    
  133. };
  134.  
  135. // • ------------------ Error-message String Resource IDs ----------------- 
  136.  
  137. enum {
  138.     kErrorMessageStrsID    = 1000,    // • Error-Message STR# Resource ID
  139.     kNoWindMsg             = 1,    // • Error-Message String Offsets 
  140.     kNoMBarMsg            = 2,
  141.     kNoMenuRsrcMsg        = 3,
  142.     kNoMemoryMsg        = 4,
  143.     kNoGWorldMsg        = 5,
  144.     kGWorldUpdateMsg    = 6,
  145.     kNoDepthMsg            = 7
  146. };
  147.  
  148. // • ------------------ Color-specific Definitions ------------------------ 
  149.  
  150. enum {
  151.     kNumColors        = 16,
  152.     kDepth            = 4        // • Number of bits per pixel for 16 colors 
  153. };
  154.  
  155. enum {
  156.     kPalWhite    = 0,    // • Palette index for white 
  157.     kPalBlack    = 15,    // • Palette index for black 
  158.     kPalBkgnd    = 2,    // • Palette index for background gray 
  159.     kPalTarget    = 3        // • Palette index for target gray 
  160. };
  161.  
  162. // • ------------------ Color Lookup Table Resource ID -------------------- 
  163.  
  164. enum {
  165.      kGrayCTableID    = (kDepth+32)    // • Gray ramp resource ID = depth + 32  
  166. };
  167.  
  168. // • ------------------ Monitor for Display of Stimulus ------------------- 
  169.  
  170. enum {
  171.     kMain         = 0,
  172.     kSecondary     = 1
  173. };
  174.  
  175. // • ------------------ Animation Definitions ----------------------------- 
  176.  
  177. #define    kFatalErrorMsg    "\pFatal Error!!"    // • Error Alert Dlg message 
  178. #define kRefreshRate        66.7    // • Apple RGB monitor refresh rate (Hz) 
  179.  
  180. enum {
  181.     kMaxFrames         = 60,    // • Max. number of frames in sequence
  182.     kMaxSizeDiff    = 20    // • Max. target size change per frame 
  183. };
  184.  
  185. enum {
  186.     kHorizontal = 0,        // • Horizontal direction on screen 
  187.     kVertical     = 1            // • Vertical direction on screen 
  188. };
  189.  
  190. // • ------------------ PICS Animation Resource Data Definition ----------- 
  191.  
  192. typedef struct {
  193.     short        bwColor;        // • B/W (0) or color (1) ? 
  194.     short        depth;            // • Pixel depth 
  195.     short        speed;            // • Positive = frames/sec, negative = sec/frame 
  196.     short        version;        // • Current version is 0 
  197.     ResType        creator;        // • Original creator signature 
  198.     long        largest;        // • Optional field - largest picture size 
  199. } PICSInfoRec, *PICSInfoPtr, **PICSInfoHandle;
  200.  
  201. // • ------------------ Program Flags Data Definition --------------------- 
  202.  
  203. typedef struct Flags {
  204.     Boolean        cancel;            // • True = Dialog box has been cancelled 
  205.     Boolean        done;            // • True = End of program
  206. } Flags;
  207.  
  208. // • ------------------ Animation Settings Data Definition ---------------- 
  209.  
  210. typedef struct Settings {
  211.     long        targetGray;        // • Gray-scale values  
  212.     long        bkgndGray;
  213.     long        frameSize;        // • Frame width (and height) in pixels 
  214.     long        numFrames;        // • Number of animation frames 
  215.     long        frameDelay;        // • Speed of motion display 
  216.     long        sizeDiff;        // • Difference in target size per frame 
  217.     long        currDepth;        // • Monitor depth at onset of program
  218.     short        numMonitors;    // • Number of monitors in this system 
  219.     short        displayMonitor;    // • Which monitor to show stimulus on 
  220. } Settings;
  221.  
  222. // • ------------------ Extended VBLTask Record Data Definition ----------- 
  223.  
  224. typedef struct XVBLTask {
  225.     VBLTask     vbl;
  226.     long         a5;
  227.     long        frames;            // • Number of frames
  228.     long        frameDelay;        // • VBlanks between frames
  229.     long        frameIndex;        // • Current frame number             
  230.     short        showFrame;        // • Display frame now?
  231. } XVBLTask, *XVBLTaskPtr;
  232.  
  233. // • ------------------ Function Prototypes ------------------------------- 
  234.  
  235. // •  A  N  I  M  A  T  I  O  N  .  C  
  236.  
  237. void        DisposeFrames( void );
  238. void        DoFilm( void );
  239. void        FindOrigin( void );
  240. void        PlayFilm( void );
  241. void        PrepareFilm( void );
  242. short        RoundUp( const double );
  243. void        ResetForeAndBackColors( void );
  244. void        UpdateGWorldColors( void );
  245.  
  246. // •  E  V  E  N  T  S  .  C  
  247.  
  248. void        MainEventLoop( void );    
  249. void        ResetWindBkgnd( void );
  250.  
  251. // •  D  I  A  L  O  G  S  .  C  
  252.  
  253. void        FrameSzDlg( void );
  254. void        FilmDlg( void );
  255. void        GrayDlg( void );
  256. void        MonitorDlg( void );
  257.  
  258. // •  F  I  L  E  S  .  C  
  259.  
  260. void        DisposeFramePICTs( void );
  261. void        OpenFilm( void );
  262. void        SaveFilm( void );
  263.  
  264. // •  M  A  I  N  .  C  
  265.  
  266. void        CleanUp( void );
  267. void        ErrNumToPstr( const short, char * );
  268. void        ErrorHandler( const short, const char *, const char *, const char * );
  269. void        MaximizeHeap( const long );
  270.  
  271. // •  S  E  T  U  P  .  C  
  272.  
  273. void        CleanUpOffScreen( void );
  274. void        GetNumMonitors();
  275. void        InitManagers( void );
  276. void        InitOffScreen( void );
  277. void        InitPalette( void );
  278. void        SetUpMenus( void );
  279. void        SetUpWindows( void );
  280. void        UpdateWindowColors( void );
  281.  
  282. // •  V  B  L  A  N  K  .  C  
  283.  
  284. void        SetUpVBlankAnimation( void );
  285. void        ShutDownVBlankAnimation( void );
  286. void        VideoProc( void );
  287.  
  288. // • ---------------------------------------------------------------------- 
  289.  
  290. #endif
  291.